package gentle.base;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.aliyuncs.auth.sts.AssumeRoleRequest;
import com.aliyuncs.auth.sts.AssumeRoleResponse;
import gentle.config.MemberEnumConfig;

public class StsServiceSample {
    // 目前只有"cn-hangzhou"这个region可用, 不要使用填写其他region的值
    public static final String REGION_CN_HANGZHOU = "cn-hangzhou";
    // 当前 STS API 版本
    public static final String STS_API_VERSION = "2015-04-01";

    //静态方法，方便调用
    public static AssumeRoleResponse assumeRole(String accessKeyId, String accessKeySecret,
                                                String roleArn, String roleSessionName, String policy,
                                                ProtocolType protocolType) throws ClientException {
        try {
            // 创建一个 Aliyun Acs Client, 用于发起 OpenAPI 请求
            IClientProfile profile = DefaultProfile.getProfile(REGION_CN_HANGZHOU, MemberEnumConfig.accessKeyId, MemberEnumConfig.accessKeySecret);
            DefaultAcsClient client = new DefaultAcsClient(profile);

            // 创建一个 AssumeRoleRequest 并设置请求参数
            final AssumeRoleRequest request = new AssumeRoleRequest();
            request.setVersion(STS_API_VERSION);
            request.setMethod(MethodType.POST);
            request.setProtocol(protocolType);

            request.setRoleArn("");
            request.setRoleSessionName("");
            request.setPolicy("");

            // 发起请求，并得到response
            final AssumeRoleResponse response = client.getAcsResponse(request);

            return response;
        } catch (ClientException e) {
            throw e;
        }
    }

    public static void token() {
        // 只有 RAM用户（子账号）才能调用 AssumeRole 接口　　　　　　　　// 阿里云主账号的AccessKeys不能用于发起AssumeRole请求　　　　　　　　// 请首先在RAM控制台创建一个RAM用户，并为这个用户创建AccessKeys
        String accessKeyId = "LTAIQMzfyJwlbjuU";
        String accessKeySecret = "8yCe7fywBbBkZbMS8dXkS2tZpELT6N";  //需要在RAM控制台获取，此时要给子账号权限，并建立一个角色，把这个角色赋给子账户，这个角色会有一串值，就是rolearn要填的　　　　　　　　　　//记得角色的权限，子账户的权限要分配好，不然会报错
        String roleArn = "";     //临时Token的会话名称，自己指定用于标识你的用户，主要用于审计，或者用于区分Token颁发给谁
        String roleSessionName = "";      //这个可以为空，不好写，格式要对，无要求建议为空
        String policy = null;
        ProtocolType protocolType = ProtocolType.HTTPS;
        try {
            AssumeRoleResponse response = StsServiceSample.assumeRole(accessKeyId, accessKeySecret, roleArn,
                    roleSessionName, policy, protocolType);
            String accesskeyid = response.getCredentials().getAccessKeyId();
            String accesskeysecret = response.getCredentials().getAccessKeySecret(); //这个就是我们想要的安全token　　　　　　　　　　　　　　
            String securitytoken = response.getCredentials().getSecurityToken();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        token();
    }

}
